<?php
// 应用公共文件

use Psr\Http\Message\MessageInterface;

/**
 * 通用化API数据格式输出
 * @param $status
 * @param string $message
 * @param array $data
 * @param int $httpStatus
 * @return \\think\\response\\Json
 * 用关联数组方式传['code'=>1]
 * code：1成功 -1失败
 * message：提示信息（可传可不传）
 * data：数据（可传可不传）
 * httpStatus：http状态码（可传可不传）
 * error：错误信息（只有code未-1时显示，可传可不传，本方法大部分由tryCatchWrapper调用，catch会自动传入错误信息，在非tryCatchWrapper方法可自行传入，一般来说不用传此参数，此参数就是用来获取catch报错信息的，自定义信息通过message传）
 */
function formatting($params = [])
{
    $code = $params['code'] ?? 0;
    $message = $params['message'] ?? ($code === 1 ? '成功' : '失败');
    $data = $params['data'] ?? [];
    $httpStatus = $params['httpStatus'] ?? 200;
    $error = $params['error'] ?? '';

    $result = [
        "code" => $code,
        "message" => $message,
    ];

    if ($data) {
        $result['data'] = $data;
    }

    if ($code !== 1 && $error) {
        $result['error'] = $error;
    }

    return json($result, $httpStatus);
}

// 用于try catch包裹
function tryCatchWrapper($callback, $arg = ['message' => ''])
{
    try {
        return $callback();
    } catch (\Exception $e) {
        if ($arg['message']) {
            return formatting([
                'code' => -1,
                'error' => $e->getMessage(),
                'message' => $arg['message']
            ]);
        } else {
            return formatting([
                'code' => -1,
                'error' => $e->getMessage(),
            ]);
        }
    }
}
